package com.ftg.learn.chapter14;

import java.sql.*;
import java.util.Arrays;

/**
 * 动态sql使用，预编译sql ，buffer pool 提高第二次以后的是查询速度
 *
 * 1 ： 静态sql每一次执行sql都要经过分析器 优化器 ...
 * 2 : 和一次执行时，会分析，优化等操作，然后把处理完成没有错误sql存起来，下次再执行时，不用二次分析了
 * buffer pool
 *     Statement  : 静态
 *     PreparedStatement ： 预编译
 * 结论 ： 预编译的sql第二次速度要快于静态sql
 * @author kangjx
 * @version 1.0
 * @date 2023/3/6 下午1:32
 */
public class LearnJdbc03 {

    private static final String url = "jdbc:mysql://localhost:10086/homework?serverTimezone=Asia/Harbin";

    private static final String username = "root";

    private static final String password = "123456";
    public static void main(String[] args) {

        String sql = "select * from student where sno = ?";

        try(
            Connection conn = DriverManager.getConnection(url,username,password);
            PreparedStatement pstmt = conn.prepareStatement(sql);
        ){
            //问题产生 ?  #1 值呢？
            pstmt.setString(1,"s004");
            ResultSet rs = pstmt.executeQuery();
            while(rs.next()){
                String sno = rs.getString(1);
                String sname = rs.getString(2);
                int age = rs.getInt(3);
                String sex = rs.getString(4);
                System.out.printf("编号%s\t姓名%s\t年龄%d\t性别%s\n",sno,sname,age,sex);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        /**
         * 面向对象 ：  处理..
         * 封装成为方法 ： 方法返回值是什么 ？  ResultSet -- autocloseable
         *  : 通用性处理
         *   : ResultSet 转换成为 list<map></map>
         *   : ResultSet 转换成为 list<pojo></pojo>
         *   : ResultSet 转换成为 json
         */
    }

}
